<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Aper&ccedil;u et liste des fonctionnalit&eacute;s des
testeurs unitaires PHP et web de SimpleTest PHP</title>
<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
</head>
<body>
<div class="menu_back">
<div class="menu"><a href="index.html">SimpleTest</a> | <a
	href="overview.html">Overview</a> | <a
	href="unit_test_documentation.html">Unit tester</a> | <a
	href="group_test_documentation.html">Group tests</a> | <a
	href="mock_objects_documentation.html">Mock objects</a> | <a
	href="partial_mocks_documentation.html">Partial mocks</a> | <a
	href="reporter_documentation.html">Reporting</a> | <a
	href="expectation_documentation.html">Expectations</a> | <a
	href="web_tester_documentation.html">Web tester</a> | <a
	href="form_testing_documentation.html">Testing forms</a> | <a
	href="authentication_documentation.html">Authentication</a> | <a
	href="browser_documentation.html">Scriptable browser</a></div>
</div>
<h1>Apercu de SimpleTest</h1>
This page...
<ul>
	<li><a href="#resume">R&eacute;sum&eacute; rapide</a> de l'outil
	SimpleTest pour PHP.</li>
	<li><a href="#fonctionnalites">La liste des fonctionnalites</a>,
	&agrave; la fois pr&eacute;sentes et &agrave; venir.</li>
	<li>Il y a beaucoup de <a href="#ressources">ressources sur
	les tests unitaires</a> sur le web.</li>
</ul>
<div class="content">
<p><a class="target" name="resume">
<h2>Qu'est-ce que SimpleTest ?</h2>
</a></p>
<p>Le coeur de SimpleTest est un framework de test construit autour
de classes de sc&eacute;narios de test. Celles-ci sont &eacute;crites
comme des extensions des classes premi&egrave;res de sc&eacute;narios de
test, chacune &eacute;largie avec des m&eacute;thodes qui contiennent le
code de test effectif. Les scripts de test de haut niveau invoque la
m&eacute;thode <span class="new_code">run()</span> &agrave; chaque
sc&eacute;nario de test successivement. Chaque m&eacute;thode de test
est &eacute;crite pour appeler des assertions diverses que le
d&eacute;veloppeur suppose &ecirc;tre vraies, <span class="new_code">assertEqual()</span>
par exemple. Si l'assertion est correcte, alors un succ&egrave;s est
exp&eacute;di&eacute; au rapporteur observant le test, mais toute erreur
d&eacute;clenche une alerte et une description de la dissension.</p>
<p>Un <a href="unit_test_documentation.html">sc&eacute;nario de
test</a> ressemble &agrave;...
<pre>
class <strong>MyTestCase</strong> extends UnitTestCase {
    <strong>
    function testLog() {
        $log = &amp;new Log('my.log');
        $log-&gt;message('Hello');
        $this-&gt;assertTrue(file_exists('my.log'));
    }</strong>
}
</pre>
</p>
<p>Ces outils sont con&ccedil;us pour le d&eacute;veloppeur. Les
tests sont &eacute;crits en PHP directement, plus ou moins
simultan&eacute;ment avec la construction de l'application
elle-m&ecirc;me. L'avantage d'utiliser PHP lui-m&ecirc;me comme langage
de test est qu'il n'y a pas de nouveau langage &agrave; apprendre, les
tests peuvent commencer directement et le d&eacute;veloppeur peut tester
n'importe quelle partie du code. Plus simplement, toutes les parties qui
peuvent &ecirc;tre acc&eacute;d&eacute;es par le code de l'application
peuvent aussi &ecirc;tre acc&eacute;d&eacute;es par le code de test si
ils sont tous les deux dans le m&ecirc;me langage.</p>
<p>Le type de sc&eacute;nario de test le plus simple est le <span
	class="new_code">UnitTestCase</span>. Cette classe de sc&eacute;nario
de test inclut les tests standards pour l'&eacute;galit&eacute;, les
r&eacute;f&eacute;rences et l'appariement de motifs (via les expressions
rationnelles). Ceux-ci testent ce que vous seriez en droit d'attendre du
r&eacute;sultat d'une fonction ou d'une m&eacute;thode. Il s'agit du
type de test le plus commun pendant le quotidien du d&eacute;veloppeur,
peut-&ecirc;tre 95% des sc&eacute;narios de test.</p>
<p>La t&acirc;che ultime d'une application web n'est cependant pas
de produire une sortie correcte &agrave; partir de m&eacute;thodes ou
d'objets, mais plut&ocirc;t de produire des pages web. La classe <span
	class="new_code">WebTestCase</span> teste des pages web. Elle simule un
navigateur web demandant une page, de fa&ccedil;on exhaustive : cookies,
proxies, connexions s&eacute;curis&eacute;es, authentification,
formulaires, cadres et la plupart des &eacute;l&eacute;ments de
navigation. Avec ce type de sc&eacute;nario de test, le
d&eacute;veloppeur peut garantir que telle ou telle information est
pr&eacute;sente dans la page et que les formulaires ainsi que les
sessions sont g&eacute;r&eacute;s comme il faut.</p>
<p>Un <a href="web_tester_documentation.html">sc&eacute;nario de
test web</a> ressemble &agrave;...
<pre>
class <strong>MySiteTest</strong> extends WebTestCase {
    <strong>
    function testHomePage() {
        $this-&gt;get('http://www.my-site.com/index.php');
        $this-&gt;assertTitle('My Home Page');
        $this-&gt;clickLink('Contact');
        $this-&gt;assertTitle('Contact me');
        $this-&gt;assertWantedPattern('/Email me at/');
    }</strong>
}
</pre>
</p>

<p><a class="target" name="fonctionnalites">
<h2>Liste des fonctionnalites</h2>
</a></p>
<p>Ci-dessous vous trouverez un canevas assez brut des
fonctionnalit&eacute;s &agrave; aujourd'hui et pour demain, sans oublier
leur date approximative de publication. J'ai bien peur qu'il soit
modifiable sans pr&eacute;-avis &eacute;tant donn&eacute; que les jalons
d&eacute;pendent beaucoup sur le temps disponible. Les trucs en vert ont
&eacute;t&eacute; cod&eacute;s, mais pas forc&eacute;ment
d&eacute;j&agrave; rendus public. Si vous avez une besoin pressant pour
une fonctionnalit&eacute; verte mais pas encore publique alors vous
devriez retirer le code directement sur le CVS chez SourceFourge. Une
fonctionnalit&eacute;e publi&eacute;e est indiqu&eacute; par "Fini".
<table>
	<thead>
		<tr>
			<th>Fonctionnalit&eacute;</th>
			<th>Description</th>
			<th>Publication</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>Sc&eacute;nariot de test unitaire</td>
			<td>Les classes de test et assertions de base</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Affichage HTML</td>
			<td>L'affichage le plus simple possible</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Autochargement des sc&eacute;narios de test</td>
			<td>Lire un fichier avec des sc&eacute;narios de test et les
			charger dans un groupe de tests automatiquement</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>G&eacute;n&eacute;rateur de code d'objets fantaisie</td>
			<td>Des objets capable de simuler d'autres objets, supprimant
			les d&eacute;pendances dans les tests</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Bouchons serveur</td>
			<td>Des objets fantaisie sans r&eacute;sultat attendu &agrave;
			utiliser &agrave; l'ext&eacute;rieur des sc&eacute;narios de test,
			pour le prototypage par exemple.</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Int&eacute;gration d'autres testeurs unitaires</td>
			<td>La capacit&eacute; de lire et simuler d'autres
			sc&eacute;narios de test en provenance de PHPUnit et de
			PEAR::Phpunit.</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Sc&eacute;nario de test web</td>
			<td>Appariement basique de motifs dans une page
			t&eacute;l&eacute;charg&eacute;e.</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Analyse de page HTML</td>
			<td>Permet de suivre les liens et de trouver la balise de titre</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Simulacre partiel</td>
			<td>Simuler des parties d'une classe pour tester moins qu'une
			classe ou dans des cas complexes.</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Gestion des cookies Web</td>
			<td>Gestion correcte des cookies au t&eacute;l&eacute;chargement
			d'une page.</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Suivi des redirections</td>
			<td>Le t&eacute;l&eacute;chargement d'une page suit
			automatiquement une redirection 300.</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Analyse d'un formulaire</td>
			<td>La capacit&eacute; de valider un formulaire simple et d'en
			lire les valeurs par d&eacute;faut.</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Interface en ligne de commande</td>
			<td>Affiche le r&eacute;sultat des tests sans navigateur web.</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Mise &agrave; nu des attentes d'une classe</td>
			<td>Peut cr&eacute;er des tests pr&eacute;cis avec des
			simulacres ainsi que des sc&eacute;narios de test.</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Sortie et analyse XML</td>
			<td>Permet de tester sur plusieurs h&ocirc;tes et
			d'int&eacute;grer des extensions d'acceptation de test.</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Sc&eacute;nario de test en ligne de commande</td>
			<td>Permet de tester des outils ou scripts en ligne de commande
			et de manier des fichiers.</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Compatibilit&eacute; avec PHP Documentor</td>
			<td>G&eacute;n&eacute;ration automatique et compl&egrave;te de
			la documentation au niveau des classes.</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Interface navigateur</td>
			<td>Mise &agrave; nu des niveaux bas de l'interface du
			navigateur web pour des sc&eacute;narios de test plus pr&eacute;cis.</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Authentification HTTP</td>
			<td>T&eacute;l&eacute;chargement des pages web
			prot&eacute;g&eacute;es avec une authentification basique seulement.</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Boutons de navigation d'un navigateur</td>
			<td>Arri&egrave;re, avant et recommencer</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Support de SSL</td>
			<td>Peut se connecter &agrave; des pages de type https.</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Support de proxy</td>
			<td>Peut se connecter via des proxys communs</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Support des cadres</td>
			<td>G&egrave;re les cadres dans les sc&eacute;narios de test
			web.</td>
			<td style="color: green;">Fini</td>
		</tr>
		<tr>
			<td>Test de l'upload de fichier</td>
			<td>Peut simuler la balise input de type file</td>
			<td style="color: red;">1.0.1</td>
		</tr>
		<tr>
			<td>Am&eacute;lioration sur la machinerie des rapports</td>
			<td>Retouche sur la transmission des messages pour une meilleur
			coop&eacute;ration avec les IDEs</td>
			<td style="color: red;">1.1</td>
		</tr>
		<tr>
			<td>Am&eacute;lioration de l'affichage des tests</td>
			<td>Une meilleure interface graphique web, avec un arbre des
			sc&eacute;narios de test.</td>
			<td style="color: red;">1.1</td>
		</tr>
		<tr>
			<td>Localisation</td>
			<td>Abstraction des messages et g&eacute;nration du code
			&agrave; partir de fichiers XML.</td>
			<td style="color: red;">1.1</td>
		</tr>
		<tr>
			<td>Simulation d'interface</td>
			<td>Peut g&eacute;n&eacute;rer des objets fantaisie tant vers
			des interfaces que vers des classes.</td>
			<td style="color: red;">2.0</td>
		</tr>
		<tr>
			<td>Test sur es exceptions</td>
			<td>Dans le m&ecirc;me esprit que sur les tests des erreurs PHP.</td>
			<td style="color: red;">2.0</td>
		</tr>
		<tr>
			<td>Rercherche d'&eacute;l&eacute;ments avec XPath</td>
			<td>Peut utiliser Tidy HTML pour un appariement plus rapide et
			plus souple.</td>
			<td style="color: red;">2.0</td>
		</tr>
	</tbody>
</table>
La migration vers PHP5 commencera juste apr&egrave;s la s&eacute;rie des
1.0, &agrave; partir de l&agrave; PHP4 ne sera plus support&eacute;.
SimpleTest est actuellement compatible avec PHP5 mais n'utilisera aucune
des nouvelles fonctionnalit&eacute;s avant la version 2.
</p>

<p><a class="target" name="ressources">
<h2>Ressources sur le web pour les tests</h2>
</a></p>
<p>Le processus est au moins aussi important que les outils. Le type
de proc&eacute;dure que fait un usage le plus intensif des outils de
test pour d&eacute;veloppeur est bien s&ucirc;r l'<a
	href="http://www.extremeprogramming.org/">Extreme Programming</a>. Il
s'agit l&agrave; d'une des <a
	href="http://www.agilealliance.com/articles/index">m&eacute;thodes
agiles</a> qui combinent plusieurs pratiques pour "lisser la courbe de
co&ucirc;t" du d&eacute;veloppement logiciel. La plus extr&egrave;me
reste le <a href="http://www.testdriven.com/modules/news/">d&eacute;veloppement
pilot&eacute; par les tests</a>, o&ugrave; vous devez adh&eacute;rer
&agrave; la r&egrave;gle du <cite>pas de code avant d'avoir un
test</cite>. Si vous &ecirc;tes plut&ocirc;t du genre planninficateur ou que
vous estimez que l'exp&eacute;rience compte plus que l'&eacute;volution,
vous pr&eacute;f&eacute;rerez peut-&ecirc;tre l'approche <a
	href="http://www.therationaledge.com/content/dec_01/f_spiritOfTheRUP_pk.html">RUP</a>.
Je ne l'ai pas test&eacute; mais je peux voir o&ugrave; vous aurez
besoin d'outils de test (cf. illustration 9).</p>
<p>La plupart des testeurs unitaires sont dans une certaine mesure
un clone de <a href="http://www.junit.org/">JUnit</a>, au moins dans
l'interface. Il y a &eacute;norm&eacute;ment d'information sur le site
de JUnit, &agrave; commencer par la <a
	href="http://junit.sourceforge.net/doc/faq/faq.htm">FAQ</a> quie
contient pas mal de conseils g&eacute;n&eacute;raux sur les tests. Une
fois mordu par le bogue vous appr&eacute;cierez s&ucirc;rement la phrase
<a href="http://junit.sourceforge.net/doc/testinfected/testing.htm">infect&eacute;
par les tests</a> trouv&eacute;e par Eric Gamma. Si vous &ecirc;tes encore
en train de tergiverser sur un testeur unitaire, sachez que les choix
principaux sont <a href="http://phpunit.sourceforge.net/">PHPUnit</a> et
<a href="http://pear.php.net/manual/en/package.php.phpunit.php">Pear
PHP::PHPUnit</a>. De nombreuses fonctionnalit&eacute;s de SimpleTest leurs
font d&eacute;faut, mais la version PEAR a d'ores et d&eacute;j&agrave;
&eacute;t&eacute; mise &agrave; jour pour PHP5. Elle est aussi
recommand&eacute;e si vous portez des sc&eacute;narios de test existant
depuis <a href="http://www.junit.org/">JUnit</a>.</p>
<p>Les d&eacute;veloppeurs de biblioth&egrave;que n'ont pas l'air de
livrer tr&egrave;s souvent des tests avec leur code : c'est bien
dommage. Le code d'une biblioth&egrave;que qui inclut des tests peut
&ecirc;tre remani&eacute; avec plus de s&eacute;curit&eacute; et le code
de test sert de documentation additionnelle dans un format assez
standard. Ceci peut &eacute;pargner la p&ecirc;che aux indices dans le
code source lorsque qu'un probl&egrave;me survient, en particulier lors
de la mise &agrave; jour d'une telle biblioth&egrave;que. Parmi les
biblioth&egrave;ques utilisant SimpleTest comme testeur unitaire on
retrouve <a href="http://wact.sourceforge.net/">WACT</a> et <a
	href="http://sourceforge.net/projects/htmlsax">PEAR::XML_HTMLSax</a>.</p>
<p>Au jour d'aujourd'hui il manque tristement beaucoup de
mati&egrave;re sur les objets fantaisie : dommage, surtout que tester
unitairement sans eux repr&eacute;sente pas mal de travail en plus. L'<a
	href="http://www.sidewize.com/company/mockobjects.pdf">article
original sur les objets fantaisie</a> est tr&egrave;s orient&eacute; Java,
mais reste int&eacute;ressant &agrave; lire. Etant donn&eacute; qu'il
s'agit d'une nouvelle technologie il y a beaucoup de discussions et de
d&eacute;bats sur comment les utiliser, souvent sur des wikis comme <a
	href="http://xpdeveloper.com/cgi-bin/oldwiki.cgi?MockObjects">Extreme
Tuesday</a> ou <a href="http://www.mockobjects.com/MocksObjectsPaper.html">www.mockobjects.com</a>ou
<a href="http://c2.com/cgi/wiki?MockObject">the original C2 Wiki</a>.
Injecter des objets fantaisie dans une classe est un des champs
principaux du d&eacute;bat : cet <a
	href="http://www-106.ibm.com/developerworks/java/library/j-mocktest.html">article
chez IBM</a> en est un bon point de d&eacute;part.</p>
<p>Il y a &eacute;normement d'outils de test web mais la plupart
sont &eacute;crits en Java. De plus les tutoriels et autres conseils
sont plut&ocirc;t rares. Votre seul espoir est de regarder directement
la documentation pour <a href="http://httpunit.sourceforge.net/">HTTPUnit</a>,
<a href="http://htmlunit.sourceforge.net/">HTMLUnit</a> ou <a
	href="http://jwebunit.sourceforge.net/">JWebUnit</a> et
d'esp&eacute;rer y trouver pour des indices. Il y a aussi des frameworks
bas&eacute;s sur XML, mais de nouveau la plupart ont besoin de Java pour
tourner.</p>

</div>
References and related information...
<ul>
	<li><a href="unit_test_documentation.html">Documentation pour
	SimpleTest</a>.</li>
	<li><a href="http://www.lastcraft.com/first_test_tutorial.php">Comment
	&eacute;crire des sc&eacute;narios de test en PHP</a> est un tutoriel
	plut&ocirc;t avanc&eacute;.</li>
	<li><a href="http://simpletest.sourceforge.net/">L'API de
	SimpleTest</a> par phpdoc.</li>
</ul>
<div class="menu_back">
<div class="menu"><a href="index.html">SimpleTest</a> | <a
	href="overview.html">Overview</a> | <a
	href="unit_test_documentation.html">Unit tester</a> | <a
	href="group_test_documentation.html">Group tests</a> | <a
	href="mock_objects_documentation.html">Mock objects</a> | <a
	href="partial_mocks_documentation.html">Partial mocks</a> | <a
	href="reporter_documentation.html">Reporting</a> | <a
	href="expectation_documentation.html">Expectations</a> | <a
	href="web_tester_documentation.html">Web tester</a> | <a
	href="form_testing_documentation.html">Testing forms</a> | <a
	href="authentication_documentation.html">Authentication</a> | <a
	href="browser_documentation.html">Scriptable browser</a></div>
</div>
<div class="copyright">Copyright<br>
Marcus Baker 2006</div>
</body>
</html>
